﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;

namespace ActionTrackerEntities
{
    public class Usuario
    {
        public Usuario()
        {
            Acciones = new List<Accion>();
            Proyectos = new List<Proyecto>();
        }

        public virtual int IdUsuario { get; set; }

        [Required(ErrorMessage = "El nombre es requerido")]
        [Display(Name = "Nombre"), StringLength(50, ErrorMessage = "El nombre no debe exceder los 50 caracteres")]
        [DataType(DataType.Text, ErrorMessage = "El nombre no es válido")]
        [RegularExpression(@"^[a-zA-Z0-9_-]{0,500}$", ErrorMessage = "No se permiten espacios ni caracteres especiales")]
        public virtual string Nombre { get; set; }

        [Required(ErrorMessage = "La contraseña es requerida")]
        [Display(Name = "Contraseña"), StringLength(10, ErrorMessage = "La contraseña no debe exceder los 10 caracteres")]
        [DataType(DataType.Text, ErrorMessage = "La contraseña no es válida")]
        [RegularExpression(@"(\S)+", ErrorMessage = "No se permiten espacios en blanco en la contraseña")]
        public virtual string Password { get; set; }

        [Required(ErrorMessage = "El tipo de usuario es requerido")]
        [Display(Name = "Tipo de Usuario")]
        public virtual int TipoUsuario { get; set; } //Ver TipoUsuarioEnum
        
        public virtual IEnumerable<Accion> Acciones { get; set; }

        public virtual IEnumerable<Proyecto> Proyectos { get; set; }
        
        public virtual DateTime? FechaBaja { get; set; }

        public virtual string StrTipoUsuario
        {
            get
            {
                switch (TipoUsuario)
                {
                    case 1:
                        return "Administrador";
                    case 2:
                        return "Usuario";
                    default:
                        return string.Empty;
                }
            }
        }

        public virtual string StrFechaBaja
        {
            get { return FechaBaja.HasValue ? FechaBaja.Value.ToString("dd/MM/yyyy") : string.Empty; }
        }

        public virtual int? IdProyectoSeleccionado { get; set; }

        public virtual bool Check { get; set; }
    }
}
